package com.milo.concurrent;

import java.util.concurrent.CyclicBarrier;

/**
 * @author: Milogenius
 * @create: 2019-04-29 15:09
 * @description: CyclicBarrier的字面意思是可循环使用（Cyclic）的屏障（Barrier）。它要做的事情是，让一
 * 组线程到达一个屏障（也可以叫同步点）时被阻塞，直到最后一个线程到达屏障时，屏障才会
 * 开门，所有被屏障拦截的线程才会继续运行。
 **/
public class CyclicBarrierTest {

    /**
     * 参数表示屏障拦截的线程数量
     */
    static CyclicBarrier c = new CyclicBarrier(2);

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //每个线程调用await方法告诉CyclicBarrier我已经到达了屏障，然后当前线程被阻塞
                    c.await();
                } catch (Exception e) {
                }
                System.out.println(1);
            }
        }).start();
        try {
            c.await();
        } catch (Exception e) {
        }
        System.out.println(2);
    }

}
